<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;

Class CacheController extends Controller
{

    public function behaviors()
    {
        //用户在请求控制器的时候，会首先调用behaviors中的内容，然后在执行相应的控制器
        echo "11111111111";
        return [
            [
                'class'=>'yii\filters\PageCache',
                'duration'=>1000,//缓存时间1000s
                'only'=>['pagecache'],//控制器的action id
//                'only'=>['pagecache', 'test'],可以指定多个
                'dependency'=>[//缓存依赖
                    'class'=>'yii\caching\FileDependency',
                    'fileName'=>'hw.txt'
                ]
            ]
        ];
    }

    /**
     * Learn cache
     *
     * @return null
     */
    public function actionIndex()
    {
        //获取缓存组件
        $cache = Yii::$app->cache;

        //往缓存中写数据
        $cache->add('key1', 'hello world!');
        $cache->add('key2', 'hello world2!');
        //注：如果往缓存中同时加了两个key1。在添加的时候，会判断key1是否存在，如果不存在就添加，已存在话就不会起作用
        //即第二条不起作用
        /*$cache->add('key1', 'hello world!');
        $cache->add('key1', 'hello world11111!');*/
        //修改缓存
//        $cache->set('key1', 'hello world2');

        //删除数据
//        $cache->delete('key1');

        //清空缓存中的所有数据
        $cache->flush();

        //读缓存
        $data = $cache->get('key1');
        dd($data);
    }

    /**
     * The time of cache
     *
     * @return null
     */
    public function actionCacheTime()
    {
        //获取缓存组件
        $cache = Yii::$app->cache;

        //有效期设置 15为15秒
//        $cache->add('key', 'Hello world!', 15);
//        $cache->set('key', 'Hello world', 15);

        dd($cache->get('key'));
    }

    /**
     * 缓存依赖
     *
     * @return null
     */
    public function actionDepend()
    {
        //获取缓存组件
        $cache = Yii::$app->cache;

        //文件依赖 如果hw.txt被修改，则缓存立刻清除
//        $dependency = new \yii\caching\FileDependency(['fileName' => 'hw.txt']);
//        $cache->add('file_key', 'hello world!', 3000, $dependency);
//        $cache->flush();
//        dd($cache->get('file_key'));

        //表达式依赖 当表达式发生变化的时候，缓存就会被清除
//        $dependency = new \yii\caching\ExpressionDependency(
//            ['expression' => 'Yii::$app->request->get("name")']
//        );

//        $cache->add('expression_key', 'hello world', 3000,  $dependency);
//        dd($cache->get('expression_key'));

        //DB依赖
//        $dependency = new \yii\caching\DbDependency(
//            ['sql'=>'SELECT count(*) FROM admin']
//        );
//
//        $cache->add('db_key', 'hello world!', 3000, $dependency);

        /**
         * 下面是可用的缓存依赖的概况：
         * •yii\caching\ChainedDependency：如果依赖链上任何一个依赖产生变化，则依赖改变。
         * •yii\caching\DbDependency：如果指定 SQL 语句的查询结果发生了变化，则依赖改变。
         * •yii\caching\ExpressionDependency：如果指定的 PHP 表达式执行结果发生变化，则依赖改变。
         * •yii\caching\FileDependency：如果文件的最后修改时间发生变化，则依赖改变。
         * •yii\caching\GroupDependency：将一项缓存数据标记到一个组名，你可以通过调用
         * yii\caching\GroupDependency::invalidate() 一次性将相同组名的缓存全部置为失效状态。
         *
         */
        dd($cache->get('db_key'));

    }

    /**
     * 片段缓存
     *
     * @return string
     */
    public function actionFragment()
    {
        return $this->renderPartial("fragment");
    }

    /**
     * 页面缓存
     *
     * @return string
     */
    public function actionPagecache()
    {
        return $this->renderPartial('pagecache');
    }




}